//#include<bits/stdc++.h>
//using namespace std;
//
//const int N = 1e5;
//int n, K, a[N+5];
//
//int main()
//{
//	cin >> n >> K;
//	for(int i=1; i<=n; i++)
//	{
//		cin >> a[i];
//	}
//	sort(a+1, a+1+n);
//	int sum = 0;
//	for(int i=n; i>0; i--)
//	{
//		int j=i-1, k=j-1;
//		if(sum >= a[i] + a[j] + a[k])
//			break;
//		for(j=i-1; j>0; j--)
//		{
//			k=j-1;
//			if(sum > a[i] + a[j] + a[k])
//				break;
//			for(k=j-1; k>0; k--)
//			{
//				if( (a[i] + a[j] + a[k]) % K == 0)
//				{
//					if(sum < a[i] + a[j] + a[k])
//					{
//						sum = a[i] + a[j] + a[k];
//					}
//				}
//				if(sum > a[i] + a[j] + a[k])
//					break;
//			}
//		}
//	}
//	cout << sum << endl;
//	return 0;
//}



//方法二: 
#include<bits/stdc++.h>
using namespace std;

vector<int>mod[1100];
int m;
int a[100010];

int get(int i, int j, int k)
{
	int size1 = mod[i].size();
	int size2 = mod[j].size();
	int size3 = mod[k].size();
	if(i == j && i == k)
	{
		if(size1 >= 3)
			return mod[i][size1-1] + mod[i][size1-2] +
				mod[i][size1-3];
	}
	if(i==j && i!=k)
	{
		if(size1>=2 && size3 >=1)
			return mod[i][size1-1] + mod[j][size2-2]+
				mod[k][size3-1];
	}
	if(j==k && j!=i)
	{
		if(size2>=2 && size1>=1)
			return mod[j][size2-1] + mod[k][size3-2] + 
				mod[i][size1-1];
	}
	if(i==k && i!=j)
	{
		if(size2>=2 && size1>=1)
			return mod[j][size2-1] + mod[k][size3-2] + 
				mod[i][size1-1];
	}
	if(i!=k && i!=j && j!=k)
	{
		if(size1>=1 && size2>=1 && size3>=1)
			return mod[i][size1-1] + mod[j][size2-1]
				 + mod[k][size3-1];
	}
	return 0;
}

int main()
{
	int n, m;
	cin >> n >> m;
	for(int i=1; i<=n; i++)
	{
		cin >> a[i];
	}
	sort(a+1, a+1+n);
	for(int i=1; i<=n; i++)
	{
		mod[a[i] % m].push_back(a[i]);
	}
	
	int res = 0;
	
	for(int i=0; i<m; i++)
	{
		for(int j=i; j<m; j++)
		{
			res = max(res, get(i, j, (m-((i+j) % m)) % m));
		}
	}
	cout << res;
	return 0;
}

























